package projeto.lp2.grupo6.logica;

/**
 * Aluno: 
 *      Guilherme Monteiro 
 * 	Italo Guedes
 * 	Tiago Leite
 * 
 * @author guilhermemg
 * @author tiagoln
 * @author italogas
 * 
 *         Classe que representa um estabelecimento.
 */
public class Estabelecimento {

    private String nome;
    private String endereco;
    private TipoDeAlmocoServido tipoDeAlmoco;

    /**
     * Construtor da classe.
     * 
     * @param nome - Nome do estabelecimento.
     * @param endereco - Endereco do estabelecimento.
     * @param TipoDeAlmocoServido - Tipo de almoco servido no estabelecimento.
     * @exception Exception
     */
    public Estabelecimento(String nome, String endereco,
            TipoDeAlmocoServido tipoDeAlmoco) throws Exception {
        setNome(nome);
        setEndereco(endereco);
        setTipoDeAlmoco(tipoDeAlmoco);
    }

    /**
     * Retorna o nome do estabelecimento.
     * 
     * @return nome - O nome do estabelecimento.
     */
    public String getNome() {
        return nome;
    }

    /**
     * Associa um nome a um estabelecimento.
     * 
     * @param nome - Novo nome a ser colocado.
     * @throws Exception - Retorna excecao caso o nome seja nulo ou vazio.
     */
    public void setNome(String nome) throws Exception {
        if (nome == null) {
            throw new Exception("Erro em nome nulo");
        }
        if (nome.isEmpty()) {
            throw new Exception("Erro em nome vazio");
        }
        this.nome = nome;
    }

    /**
     * Retorna String do estabelecimento.
     * 
     * @return endereco - Endereco do estabelecimento.
     */
    public String getEndereco() {
        return endereco;
    }

    /**
     * Associa um endereco a um estabelcimento.
     * 
     * @param endereco - Novo endereco do estabelecimento.
     * @throws Exception - Retorna uma excecao caso o endereco seja nulo.
     */
    public void setEndereco(String endereco) throws Exception {
        if (endereco == null) {
            throw new Exception("Erro em endereco nulo");
        }
        this.endereco = endereco;
    }

    /**
     * Retorna um tipo de almoco servido em um estabelecimento.
     * 
     * @return tipo de almoco - Um enum referente ao tipo de almoco.
     */
    public TipoDeAlmocoServido getTipoDeAlmoco() {
        return tipoDeAlmoco;
    }

    /**
     * Associa um tipo de almoco servido a um estabelecimento.
     * 
     * @param tipoDeAlmoco - Um enum referente a um tipo de almoco.
     * @throws Exception - Retorna uma excecao caso o tipo seja nulo.
     */
    public void setTipoDeAlmoco(TipoDeAlmocoServido tipoDeAlmoco)
            throws Exception {

        if (tipoDeAlmoco == null) {
            throw new Exception("Erro em tipo de almoco nulo");
        } else {
            this.tipoDeAlmoco = tipoDeAlmoco;
        }
    }
}
